Platform Explorer / Nuxeo Platform LTS 2017 9.10

Extension point chains

Documentation

Operation Chain registration

Contribution Descriptors

  • Class: org.nuxeo.ecm.automation.core.OperationChainContribution

Existing Contributions

Contributions are presented in the same order as the registration order on this extension point. This order is displayed before the contribution name, in brackets.

  • nuxeo-automation-jsf-9.10.jar /OSGI-INF/operations-contrib.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="Blob.ImportWorklist">
          <aliases>
            <alias>ImportWorklist</alias>
          </aliases>
          <operation id="WebUI.InitSeamContext"/>
          <operation id="UserWorkspace.CreateDocumentFromBlob"/>
          <operation id="Document.Save"/>
          <operation id="WebUI.AddToWorklist"/>
          <operation id="WebUI.DestroySeamContext"/>
        </chain>
        <chain id="Blob.ImportClipboard">
          <aliases>
            <alias>ImportClipboard</alias>
          </aliases>
          <operation id="WebUI.InitSeamContext"/>
          <operation id="UserWorkspace.CreateDocumentFromBlob"/>
          <operation id="Document.Save"/>
          <operation id="WebUI.AddToClipboard"/>
          <operation id="WebUI.DestroySeamContext"/>
        </chain>
        <chain id="SeamActions.GET">
          <operation id="WebUI.RunOperationInSeam">
            <param name="id" type="string">Actions.GET</param>
          </operation>
        </chain>
    
        <chain id="FileManager.ImportWithMetaDataInSeam">
          <operation id="FileManager.Import">
            <param name="overwite" type="boolean">true</param>
          </operation>
          <operation id="Document.Update">
            <param name="properties" type="properties">expr:Context.get("docMetaData")
            </param>
          </operation>
          <operation id="WebUI.RunOperationInSeam">
            <param name="id" type="string">WebUI.Refresh</param>
          </operation>
        </chain>
    
        <chain id="FileManager.ImportInSeam">
          <operation id="FileManager.Import">
            <param name="overwite" type="boolean">true</param>
          </operation>
          <operation id="WebUI.RunOperationInSeam">
            <param name="id" type="string">WebUI.Refresh</param>
          </operation>
        </chain>
    
      </extension>
  • nuxeo-platform-webapp-core-9.10.jar /OSGI-INF/chains-contrib.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="addCurrentDocumentToWorklist">
          <operation id="Context.FetchDocument"/>
          <operation id="WebUI.AddToWorklist"/>
          <operation id="WebUI.AddMessage">
            <param name="severity" type="string">INFO</param>
            <param name="message" type="string">label.document.added.to.worklist</param>
          </operation>
        </chain>
    
      </extension>
  • nuxeo-platform-mail-core-9.10.jar /OSGI-INF/automation-contrib.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="CreateMailDocumentFromAutomation">
          <operation id="Context.RestoreDocumentInput">
            <param name="name" type="string">mailFolder</param>
          </operation>
          <operation id="Document.Create">
            <param name="type" type="string">MailMessage</param>
            <param name="name" type="string">expr:Context["mailDocumentName"]</param>
            <param name="properties" type="properties">expr:mail:messageId=@{messageId}
            </param>
          </operation>
          <operation id="Context.SetInputAsVar">
            <param name="name" type="string">mailDocument</param>
          </operation>
          <operation id="Context.RunOperationOnList">
            <param name="id" type="string">ProcessAttachment</param>
            <param name="list" type="string">attachments</param>
            <param name="isolate" type="boolean">true</param>
            <param name="item" type="string">attachment</param>
          </operation>
          <operation id="RunScript">
            <param name="script" type="string">
               
               Context["mailDocument"].setPropertyValue("dc:title",Context["subject"]);
               Context["mailDocument"].setPropertyValue("mail:htmlText",Context["text"]);
               Context["mailDocument"].setPropertyValue("mail:recipients",Context["recipients"]);
               Context["mailDocument"].setPropertyValue("mail:cc_recipients",Context["ccRecipients"]);
               Context["mailDocument"].setPropertyValue("mail:sending_date",Context["sendingDate"]);
                  
            </param>
          </operation>
          <operation id="Context.RestoreDocumentInput">
            <param name="name" type="string">mailDocument</param>
          </operation>
          <operation id="Document.Save"/>
        </chain>
        <chain id="ProcessAttachment">
          <operation id="Context.RestoreBlobInput">
            <param name="name" type="string">attachment</param>
          </operation>
          <operation id="Blob.AttachOnDocument">
            <param name="document" type="document">expr:Context["mailDocument"]</param>
            <param name="save" type="boolean">false</param>
            <param name="xpath" type="string">files:files</param>
          </operation>
        </chain>
      </extension>
  • nuxeo-automation-features-9.10.jar /OSGI-INF/operations-contrib.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="VersionAndAttachFile">
          <operation id="Context.PushBlobList">
          </operation>
          <operation id="Repository.GetDocument">
            <param name="value" type="string">expr:Context.get("currentDocument")</param>
          </operation>
          <operation id="Document.CheckIn">
            <param name="version" type="string">minor</param>
            <param name="comment" type="string">Automatic checkin before file update</param>
          </operation>
          <operation id="Context.SetInputAsVar">
            <param name="name" type="string">newDocument</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">currentDocument</param>
            <param name="value" type="string">expr:Context.get("newDocument").id</param>
          </operation>
          <operation id="Context.PopBlobList">
          </operation>
          <operation id="BlobHolder.AttachOnCurrentDocument">
            <param name="useMainBlob" type="boolean">true</param>
          </operation>
        </chain>
        <chain id="AttachFiles">
          <operation id="BlobHolder.AttachOnCurrentDocument">
            <param name="useMainBlob" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="VersionAndAttachFiles">
          <operation id="Context.PushBlobList">
          </operation>
          <operation id="Repository.GetDocument">
            <param name="value" type="string">expr:Context.get("currentDocument")</param>
          </operation>
          <operation id="Document.CheckIn">
            <param name="version" type="string">minor</param>
            <param name="comment" type="string">Automatic checkin before files update</param>
          </operation>
          <operation id="Context.SetInputAsVar">
            <param name="name" type="string">newDocument</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">currentDocument</param>
            <param name="value" type="string">expr:Context.get("newDocument").id</param>
          </operation>
          <operation id="Context.PopBlobList">
          </operation>
          <operation id="BlobHolder.AttachOnCurrentDocument">
            <param name="useMainBlob" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="FileManager.ImportWithMetaData">
          <operation id="FileManager.Import">
             <param name="overwite" type="boolean">true</param>
          </operation>
          <operation id="Document.Update">
            <param name="properties" type="properties">expr:Context.get("docMetaData")</param>
          </operation>
        </chain>
      </extension>
  • nuxeo-platform-rendition-core-9.10.jar /OSGI-INF/rendition-download-contrib.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="mainBlob">
          <operation id="Context.PopDocument"/>
          <operation id="Document.GetBlob"/>
        </chain>
    
        <chain id="containerContentBlob">
          <operation id="Context.PopDocument"/>
          <operation id="Document.GetContainerRendition">
            <param name="reason" type="string">download</param>
            <param name="limit" type="int">200</param>
            <param name="maxDepth" type="int">2</param>
          </operation>
        </chain>
    
      </extension>
  • nuxeo-platform-rendition-core-9.10.jar /OSGI-INF/rendition-contrib.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="blobToPDF">
          <operation id="Context.PopBlob"/>
          <operation id="Blob.ToPDF"/>
        </chain>
    
        <chain id="xmlExportRendition">
          <operation id="Context.PopDocument"/>
          <operation id="Document.Export"/>
        </chain>
    
        <chain id="zipTreeExportRendition">
          <operation id="Context.PopDocument"/>
          <operation id="Document.Export">
            <param name="exportAsTree" type="boolean">true</param>
          </operation>
        </chain>
      </extension>
  • nuxeo-platform-webapp-base-9.10.jar /OSGI-INF/chains-contrib.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="downloadFilesZip">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.GetBlobs"/>
          <operation id="Blob.CreateZip">
            <param name="filename" type="string">attachments.zip
            </param>
          </operation>
          <operation id="WebUI.DownloadFile"/>
        </chain>
    
      </extension>
  • nuxeo-routing-dm-9.10.jar /OSGI-INF/dm-task-operation-chains-contrib.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="simpleTask">
          <operation id="Context.FetchDocument"/>
          <operation id="Workflow.CreateRoutingTask">
            <param name="accept operation chain" type="string">
              setTaskDone
            </param>
            <param name="reject operation chain" type="string">
              setTaskDone
            </param>
            <param name="mappingProperties" type="Properties">
              <property key="dc:description">StepTask:dc:description</property>
              <property key="nt:directive">StepTask:dc:description</property>
            </param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
            <param name="rollbackGlobalOnError" type="boolean">false</param>
            <param name="id" type="string">sendTaskCreatedNotificationMail
            </param>
          </operation>
        </chain>
    
        <chain id="followLifeCycleTransitionTask">
          <operation id="Context.FetchDocument"/>
          <operation id="Workflow.CreateRoutingTask">
            <param name="accept operation chain" type="string">
              followLifeCycleTransition
            </param>
            <param name="reject operation chain" type="string">
              setTaskDone
            </param>
            <param name="mappingProperties" type="Properties">
              <property key="dc:description">StepTask:dc:description</property>
            </param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
            <param name="rollbackGlobalOnError" type="boolean">false</param>
            <param name="id" type="string">sendTaskCreatedNotificationMail
            </param>
          </operation>
        </chain>
    
        <chain id="publishTask">
          <operation id="Context.FetchDocument"/>
          <operation id="Workflow.CreateRoutingTask">
            <param name="accept operation chain" type="string">
              publishDocument
            </param>
            <param name="reject operation chain" type="string">
              setTaskDone
            </param>
            <param name="mappingProperties" type="Properties">
              <property key="dc:description">StepTask:dc:description</property>
            </param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
            <param name="rollbackGlobalOnError" type="boolean">false</param>
            <param name="id" type="string">sendTaskCreatedNotificationMail
            </param>
          </operation>
        </chain>
    
        <chain id="conditionalTask">
          <operation id="Context.FetchDocument"/>
          <operation id="Workflow.CreateRoutingTask">
            <param name="accept operation chain" type="string">
              evaluateCondition
            </param>
            <param name="reject operation chain" type="string">
              setTaskDone
            </param>
            <param name="mappingProperties" type="Properties">
              <property key="dc:description">StepTask:dc:description</property>
            </param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
            <param name="rollbackGlobalOnError" type="boolean">false</param>
            <param name="id" type="string">sendTaskCreatedNotificationMail
            </param>
          </operation>
        </chain>
    
        <chain id="setTaskDone">
          <operation id="Document.Routing.SetRunningStepFromTask">
            <param name="mappingComments" type="boolean">true</param>
          </operation>
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
    
        <chain id="undoRunningTask">
          <operation id="Workflow.RemoveRoutingTask"/>
          <operation id="Document.Routing.BackToReady"/>
        </chain>
    
        <chain id="followLifeCycleTransition">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Routing.SetRunningStepFromTask"/>
          <operation id="Document.FollowLifecycleTransition">
            <param name="value" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("tkst:directive")
            </param>
          </operation>
    
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
    
        <chain id="publishDocument">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Routing.SetRunningStepFromTask"/>
          <operation id="Document.Publish">
            <param name="target" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("tkst:directive")
            </param>
          </operation>
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
    
        <chain id="evaluateCondition">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Routing.SetRunningStepFromTask"/>
          <operation id="Document.Routing.EvaluateCondition">
            <param name="subject" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("ctkst:subject")
            </param>
            <param name="operator" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("ctkst:operator")
            </param>
            <param name="value" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("ctkst:value")
            </param>
          </operation>
          <operation id="Update.NextStep.ConditionalFolder">
            <param name="nextStepPos" type="string">expr:Context['nextStepPos']
            </param>
          </operation>
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
    
        <chain id="sendTaskCreatedNotificationMail">
          <operation id="Notification.SendMail">
            <param name="from" type="string">Administrator@nuxeo.com</param>
            <param name="message" type="string">template:routingTaskAssigned
            </param>
            <param name="subject" type="string">expr:Context["document.routing.step"].getDocument().getPropertyValue("dc:title")
            </param>
            <param name="to" type="stringlist">expr:Fn.getEmails(Context["document.routing.task.actors"])
            </param>
            <param name="HTML" type="boolean">false</param>
          </operation>
        </chain>
      </extension>
  • nuxeo-routing-core-9.10.jar /OSGI-INF/document-routing-operation-chains-contrib.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="setDone">
          <operation id="Document.Routing.Step.Done"/>
        </chain>
        <chain id="simpleValidate">
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
        <chain id="simpleRefuse">
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
        <chain id="simpleUndo">
          <operation id="Document.Routing.BackToReady"/>
        </chain>
        <chain id="setNextStep">
          <operation id="Update.NextStep.ConditionalFolder"/>
        </chain>
        <chain id="decideNextStepAndSimpleValidate">
          <operation id="Update.NextStep.ConditionalFolder">
            <param name="nextStepPos" type="string">expr:Context['nextStepPos']
            </param>
          </operation>
          <operation id="Document.Routing.Resume.Step"/>
        </chain>
        <chain id="updateCommentsOnDoc">
          <operation id="Document.Routing.UpdateCommentsInfoOnDocument"/>
        </chain>
        <chain id="simpleChooseNextOption1AndDone">
          <operation id="Update.NextStep.ConditionalFolder">
            <param name="nextStepPos" type="string">1</param>
          </operation>
          <operation id="Document.Routing.Step.Done"/>
        </chain>
        <chain id="simpleChooseNextOption2AndDone">
          <operation id="Update.NextStep.ConditionalFolder">
            <param name="nextStepPos" type="string">2</param>
          </operation>
          <operation id="Document.Routing.Step.Done"/>
        </chain>
      </extension>
  • nuxeo-platform-comment-workflow-9.10.jar /OSGI-INF/comment-operation-contrib.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="acceptComment">
          <operation id="Context.FetchDocument"/>
          <operation id="Comment.Moderate">
            <param name="accept" type="boolean">true</param>
          </operation>
        </chain>
    
        <chain id="rejectComment">
          <operation id="Context.FetchDocument"/>
          <operation id="Comment.Moderate">
            <param name="accept" type="boolean">false</param>
          </operation>
        </chain>
    
      </extension>
  • nuxeo-platform-imaging-core-9.10.jar /OSGI-INF/operations-contrib.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
    
        <chain id="Image.Blob.Resize">
          <operation id="Blob.RunConverter">
            <param name="converter" type="string">pictureResize</param>
          </operation>
        </chain>
    
        <chain id="Image.Blob.ConvertToPDF">
          <operation id="Context.PopBlob"/>
          <operation id="Blob.RunConverter">
            <param name="converter" type="string">pictureConvertToPDF</param>
          </operation>
        </chain>
    
      </extension>
  • nuxeo-easyshare-core-9.10.jar /OSGI-INF/extensions.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="addToAShareDocument">
          <operation id="Seam.GetCurrentDocument"/>
          <operation id="Context.SetInputAsVar">
            <param name="name" type="string">shareDocument</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">shareDocumentPath</param>
            <param name="value" type="object">expr:Document.path</param>
          </operation>
          <operation id="Seam.FetchFromWorklist"/>
          <operation id="CreateProxyLive">
            <param name="Destination Path" type="string">expr:shareDocumentPath</param>
          </operation>
          <operation id="Context.RestoreDocumentInput">
            <param name="name" type="string">shareDocument</param>
          </operation>
          <operation id="Audit.Log">
            <param name="event" type="string">Documents added to the share</param>
            <param name="category" type="string">EasyShareFolderCategory</param>
            <param name="comment" type="string">expr:Some documents were added to the share folder @{Document["dc:title"]}</param>
          </operation>
          <operation id="Seam.Refresh"/>
          <operation id="Seam.AddInfoMessage">
            <param name="message" type="string">Added</param>
          </operation>
        </chain>
        <chain id="navToParent">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.GetParent"/>
          <operation id="Seam.NavigateTo"/>
        </chain>
      </extension>
  • nuxeo-routing-default-9.10.jar /OSGI-INF/extensions.xml
    <extension point="chains" target="org.nuxeo.ecm.core.operation.OperationServiceComponent">
        <chain id="NRD-AC-PR-ChooseParticipants-Output">
          <operation id="Context.FetchDocument"/>
          <operation id="RunOperation">
            <param name="id" type="string">NRD-AC-PR-LockDocument</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
          <operation id="Context.SetWorkflowVar">
            <param name="name" type="string">initiatorComment</param>
            <param name="value" type="object">expr:NodeVariables["comment"]</param>
          </operation>
        </chain>
        <chain id="NRD-AC-PR-LockDocument">
          <operation id="Context.FetchDocument"/>
          <operation id="Auth.LoginAs">
            <param name="name" type="string">expr:workflowInitiator</param>
          </operation>
          <operation id="RunOperation">
            <param name="id" type="string">expr:Document.isLocked()?"voidChain":"Document.Lock"</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="NRD-AC-PR-UnlockDocument">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Unlock"/>
        </chain>
        <chain id="NRD-AC-PR-ValidateNode-Output">
          <operation id="Context.FetchDocument"/>
          <operation id="RunOperation">
            <param name="id" type="string">NRD-AC-PR-UnlockDocument</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
          <operation id="RunOperation">
            <param name="id" type="string">logInAudit</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="NRD-AC-PR-force-validate">
          <operation id="Context.FetchDocument"/>
          <operation id="Auth.LoginAs">
            <param name="name" type="string">expr:Context["workflowInitiator"]</param>
          </operation>
          <operation id="Audit.LogEvent">
            <param name="event" type="string">Consultation time excedeed</param>
            <param name="category" type="string">Review workflow</param>
            <param name="comment" type="string">Some consultation tasks were aborted by the system as they received no feedback message.</param>
          </operation>
          <operation id="Workflow.ResumeNode"/>
        </chain>
        <chain id="NRD-AC-PR-storeTaskInfo">
          <operation id="Context.FetchDocument"/>
          <operation id="RunScript">
            <param name="script" type="string">This[0]</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">tasksInfo</param>
            <param name="value" type="object">expr:NodeVariables["tasks"]</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">numberNA</param>
            <param name="value" type="object">expr:NodeVariables["tasks"].getNumberEndedWithStatus("NA")</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">numberRejected</param>
            <param name="value" type="object">expr:NodeVariables["tasks"].getNumberEndedWithStatus("reject")</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">numberApproved</param>
            <param name="value" type="object">expr:NodeVariables["tasks"].getNumberEndedWithStatus("approve")</param>
          </operation>
          <operation id="Context.SetVar">
            <param name="name" type="string">numberOfTasks</param>
            <param name="value" type="object">expr:NodeVariables["numberOfTasks"]</param>
          </operation>
          <operation id="Render.Document">
            <param name="template" type="string">template:NRD-PR-TasksInfo</param>
            <param name="filename" type="string">output.ftl</param>
            <param name="mimetype" type="string">text/xml</param>
            <param name="type" type="string">ftl</param>
          </operation>
          <operation id="Context.SetWorkflowVar">
            <param name="name" type="string">review_result_file</param>
            <param name="value" type="object">expr:This.get(0)</param>
          </operation>
          <operation id="Context.SetWorkflowVar">
            <param name="name" type="string">review_result</param>
            <param name="value" type="object">expr:This.get(0).getString()</param>
          </operation>
        </chain>
        <chain id="cancelWorkflow">
          <operation id="Context.FetchDocument"/>
          <operation id="Context.SetVar">
            <param name="name" type="string">isParallelWF</param>
            <param name="value" type="object">expr:Event.context.getProperty("wfName").equals("wf.parallelDocumentReview.ParallelDocumentReview")?true:false</param>
          </operation>
          <operation id="RunOperation">
            <param name="id" type="string">expr:isParallelWF?"Document.Unlock":"voidChain"</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
        </chain>
        <chain id="initInitiatorComment">
          <operation id="RunScript">
            <param name="script" type="string">if((NodeVariables["comment"] != "") AND (NodeVariables["comment"] != null)){
    WorkflowVariables["initiatorComment"]= NodeVariables["comment"];}</param>
          </operation>
        </chain>
        <chain id="logInAudit">
          <operation id="Audit.LogEvent">
            <param name="event" type="string">expr:NodeVariables["button"] =="reject"?"chain.document.refused":"chain.document.validated"</param>
            <param name="category" type="string">Review workflow</param>
            <param name="comment" type="string">expr:@{nodeLastActor} @{NodeVariables["button"] =="reject"?"chain.document.refused":"chain.document.validated"} the document with the following comment: @{NodeVariables["comment"]}</param>
          </operation>
        </chain>
        <chain id="nextAssignee">
          <operation id="RunScript">
            <param name="script" type="string">if (NodeVariables["button"] == "validate") {
      WorkflowVariables["index"] = WorkflowVariables["index"] + 1;
    }
    else if (NodeVariables["button"] == "reject") {
      WorkflowVariables["index"] = WorkflowVariables["index"] - 1;
    }
    else if (NodeVariables["button"] == "submit") {
      WorkflowVariables["index"] = 0;
    }</param>
          </operation>
        </chain>
        <chain id="notifyInitiatorEndOfWorkflow">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.Mail">
            <param name="from" type="string">expr:Env["mail.from"]</param>
            <param name="message" type="string">The document was approved by every participant.</param>
            <param name="subject" type="string">expr:@{Env["nuxeo.notification.eMailSubjectPrefix"]} Document approved</param>
            <param name="to" type="stringlist">expr:Fn.getEmail(workflowInitiator)</param>
            <param name="HTML" type="boolean">false</param>
            <param name="rollbackOnError" type="boolean">true</param>
            <param name="viewId" type="string">view_documents</param>
          </operation>
        </chain>
        <chain id="reinitAssigneeComment">
          <operation id="RunScript">
            <param name="script" type="string">if((NodeVariables["comment"] != "") AND (NodeVariables["comment"] != null)){
    NodeVariables["comment"]= null;}</param>
          </operation>
        </chain>
        <chain id="terminateWorkflow">
          <operation id="Context.FetchDocument"/>
          <operation id="RunOperation">
            <param name="id" type="string">logInAudit</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
          <operation id="Context.RunDocumentOperationInNewTx">
            <param name="id" type="string">notifyInitiatorEndOfWorkflow</param>
            <param name="isolate" type="boolean">false</param>
            <param name="rollbackGlobalOnError" type="boolean">false</param>
          </operation>
          <operation id="RunOperation">
            <param name="id" type="string">expr:WorkflowVariables["validationOrReview"] == "validation"?"validateDocument":"voidChain"</param>
            <param name="isolate" type="boolean">false</param>
          </operation>
          <operation id="Audit.LogEvent">
            <param name="event" type="string">Review completed successfully</param>
            <param name="category" type="string">Review workflow</param>
            <param name="comment" type="string">All the participants of the review have approved the document.</param>
          </operation>
        </chain>
        <chain id="validateDocument">
          <operation id="Context.FetchDocument"/>
          <operation id="Document.FollowLifecycleTransition">
            <param name="value" type="string">approve</param>
          </operation>
          <operation id="Document.CheckIn">
            <param name="version" type="string">minor</param>
            <param name="comment" type="string">Automatic checkin after validation</param>
          </operation>
        </chain>
        <chain id="voidChain">
          <operation id="Context.FetchDocument"/>
        </chain>
      </extension>